add_chain6() {
  IPTABLES="/sbin/ip6tables"
  add_chain "$@"
}

del_chain6() {
  IPTABLES="/sbin/ip6tables"
  del_chain "$@"
}

add_chain() {
  (
    set -e
    IPTABLES="${IPTABLES:=/sbin/iptables}"
    if ! $IPTABLES -L | grep -q "Chain *$1"; then
      $IPTABLES        -N $1
      $IPTABLES -t nat -N $1
    fi
    if [ "$2" = "tcp" ] || [ "$2" = "udp" ]; then
      $IPTABLES        -A $1 -p $2 --dport $3 -j ACCEPT
      $IPTABLES -t nat -A $1 -p $2 --dport $3 -j ACCEPT
    else
      $IPTABLES        -A $1 -p $2 -j ACCEPT
      $IPTABLES -t nat -A $1 -p $2 -j ACCEPT
    fi

    if ! $IPTABLES -L in_mod | grep -q "$1"; then
      $IPTABLES        -A in_mod  -j $1
      $IPTABLES -t nat -A pre_mod -j $1
    fi
  )
  unset IPTABLES
}

del_chain() {
  IPTABLES="${IPTABLES:=/sbin/iptables}"
  if $IPTABLES -L | grep -q "Chain *$1"; then
    $IPTABLES -D in_mod -j $1
    $IPTABLES -F $1
    $IPTABLES -X $1
    $IPTABLES -t nat -D pre_mod -j $1
    $IPTABLES -t nat -F $1
    $IPTABLES -t nat -X $1
  fi
  unset IPTABLES
}
